SAP HANA Oneをクラスタコンピュートインスタンスで試す
AWS Marketplaceから利用開始
AWS MarketplaceからSAP HANA Oneが使えるようになりました!しかも、本番運用可能なライセンス付きです。インメモリコンピューティングをするためにハードウェアやソフトウェアを買う必要はありません。1時間単位で借りることができるのです!現在、SAP HANA Oneは、US East(Virginia)、US West(Oregon)、EU West(Ireland)にあるクラスタコンピュートインスタンス上で直ぐに使うことが出来ます。
クラスタコンピュートインスタンス
SAP HANA Oneで使われる、クラスタコンピュートインスタンスの性能をご覧下さい。モンスターです。
クラスタコンピュートエイトエクストララージインスタンス
- 60.5 GiB メモリ
- 88 EC2 コンピューティングユニット(ECU)(2 × Intel Xeon E5-2670、8コア "Sandy Bridge" アーキテクチャ)
- 3370 GB インスタンスストレージ
- 64ビット プラットフォーム
- I/O 性能: 超高速(10 ギガビットイーサネット)
- EBS 最適化: 使用不可*
- API 名: cc2.8xlarge
AWS Marketplaceから起動する
SAP HANA Oneの使い方は簡単です。AWS Marketplaceから選択するだけです。ここから選んで起動するだけで、ソフトウェアのライセンスとEC2インスタンスの使用料がセットになって計算されます。
今回は、オレゴンで起動してみましょう。
そして、起動ボタンを押せばOK!ひとつ、注意点としては、KeyPairを先に作っておきましょう。
インスタンス起動中です。。。
無事に起動完了しました!
AWS管理コンソールの設定
無事に起動が確認できましたら、AWS管理コンソールで外部から接続できるようにセキュリティグループの設定をします。SSHのポート(22)、JDBC接続のポート(30015)、HANA Studio接続のポート(50013-50014)を開けて下さい。また、固定IPアドレス(EIP)を付与すると接続文字列が短くてイイ感じです。
SAP HANA OneへSSH接続する
SSHのポートを開きましたので接続してみましょう。
$ ssh -i hogehoge.pem [email protected]
楽しんでね〜というメッセージ
__| __|_ ) SUSE Linux Enterprise _| ( / Server 11 SP1 ___|\___|___| x86_64 (64-bit) For more information about using SUSE Linux Enterprise Server please see http://www.novell.com/documentation/sles11/ Have a lot of fun... hanaserver:~ #
接続すると、ライセンスについて承認を求めて来ます。全部読んだら最後にYesを選択して次に進みましょう。次に行うことは、管理者パスワードの変更です。
$ passwd hdbadm
そして、ユーザを変更します。
$ su - hdbadm
続けてSAP HANAを起動します。
hanaserver:/usr/sap/HDB/HDB00> HDB start &
さらに、HANAのシステム管理ユーザのパスワードを変更します。hdbsqlというDB接続ターミナルを使います。
hanaserver:/usr/sap/HDB/HDB00> hdbsql Welcome to the SAP HANA Database interactive terminal. Type: ¥h for help with commands ¥q to quit hdbsql=> ¥c -i 00 -n localhost:30015 -u SYSTEM -p manager Connected to HDB@hanaserver:30015 hdbsql HDB=> alter user SYSTEM password hogehoge 0 rows affected (4155 usec) hdbsql HDB=> quit
SAP HANA Studioから接続する
SAP HANA Studioを使ってアクセスする方法は、以前の記事で紹介させて頂きましたので、そちらをご覧下さい。
Amazon EC2上でSAP HANAを使ったインメモリコンピューティング事始め
接続確認できましたので、データベース概要を見てみましょう。50GBのメモリ領域と16CPUを使えるという夢のマシンです。
JDBC接続してみる
最後にJDBC接続をしてみたいと思います。まずは、簡単なテーブル検索です。フツーに書けますね。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class HanaOne { public static void main(String[] args) throws Exception{ Class.forName("com.sap.db.jdbc.Driver"); String url = "jdbc:sap://XXX.XXX.XXX.XXX:30015/?autocommit=false"; Connection conn = DriverManager.getConnection(url, Credencials.user, Credencials.pass); Statement stmt = conn.createStatement(); String sql = "select * from account"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ System.out.print(rs.getString(1)+","); System.out.print(rs.getString(2)+","); System.out.print(rs.getString(3)+"\n"); } System.out.println("finished."); } }
データベースのメタデータを取得する
DBの概要を知るために、JDBCメタデータを取得して表示したいと思います。
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; public class HanaOneMeta { public static void main(String[] args) throws Exception{ Class.forName("com.sap.db.jdbc.Driver"); String url = "jdbc:sap://54.245.101.44:30015/?autocommit=false"; Connection conn = DriverManager.getConnection(url, Credencials.user, Credencials.pass); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("CatalogSeparator : "+dbmd.getCatalogSeparator()); System.out.println("CatalogTerm : "+dbmd.getCatalogTerm()); System.out.println("DatabaseProductName : "+dbmd.getDatabaseProductName()); System.out.println("DatabaseProductVersion : "+dbmd.getDatabaseProductVersion()); System.out.println("DatabaseMajorVersion : "+dbmd.getDatabaseMajorVersion()); System.out.println("DatabaseMinorVersion : "+dbmd.getDatabaseMinorVersion()); System.out.println("DefaultTransactionIsolation : "+dbmd.getDefaultTransactionIsolation()); System.out.println("DriverMajorVersion : "+dbmd.getDriverMajorVersion()); System.out.println("DriverMinorVersion : "+dbmd.getDriverMinorVersion()); System.out.println("DriverName : "+dbmd.getDriverName()); System.out.println("DriverVersion : "+dbmd.getDriverVersion()); System.out.println("ExtraNameCharacters : "+dbmd.getExtraNameCharacters()); System.out.println("IdentifierQuoteString : "+dbmd.getIdentifierQuoteString()); System.out.println("JDBCMajorVersion : "+dbmd.getJDBCMajorVersion()); System.out.println("JDBCMinorVersion : "+dbmd.getJDBCMinorVersion()); System.out.println("MaxBinaryLiteralLength : "+dbmd.getMaxBinaryLiteralLength()); System.out.println("MaxCatalogNameLength : "+dbmd.getMaxCatalogNameLength()); System.out.println("MaxCharLiteralLength : "+dbmd.getMaxCharLiteralLength()); System.out.println("MaxColumnNameLength : "+dbmd.getMaxColumnNameLength()); System.out.println("MaxColumnsInGroupBy : "+dbmd.getMaxColumnsInGroupBy()); System.out.println("MaxColumnsInIndex : "+dbmd.getMaxColumnsInIndex()); System.out.println("MaxColumnsInOrderBy : "+dbmd.getMaxColumnsInOrderBy()); System.out.println("MaxColumnsInSelect : "+dbmd.getMaxColumnsInSelect()); System.out.println("MaxColumnsInTable : "+dbmd.getMaxColumnsInTable()); System.out.println("MaxConnections : "+dbmd.getMaxConnections()); System.out.println("MaxCursorNameLength : "+dbmd.getMaxCursorNameLength()); System.out.println("MaxIndexLength : "+dbmd.getMaxIndexLength()); System.out.println("MaxProcedureNameLength : "+dbmd.getMaxProcedureNameLength()); System.out.println("MaxRowSize : "+dbmd.getMaxRowSize()); System.out.println("MaxSchemaNameLength : "+dbmd.getMaxSchemaNameLength()); System.out.println("MaxStatementLength : "+dbmd.getMaxStatementLength()); System.out.println("MaxStatements : "+dbmd.getMaxStatements()); System.out.println("MaxTableNameLength : "+dbmd.getMaxTableNameLength()); System.out.println("MaxTablesInSelect : "+dbmd.getMaxTablesInSelect()); System.out.println("MaxUserNameLength : "+dbmd.getMaxUserNameLength()); System.out.println("NumericFunctions : "+dbmd.getNumericFunctions()); System.out.println("ProcedureTerm : "+dbmd.getProcedureTerm()); System.out.println("ResultSetHoldability : "+dbmd.getResultSetHoldability()); System.out.println("RowIdLifetime : "+dbmd.getRowIdLifetime()); System.out.println("SchemaTerm : "+dbmd.getSchemaTerm()); System.out.println("SearchStringEscape : "+dbmd.getSearchStringEscape()); System.out.println("SQLKeywords : "+dbmd.getSQLKeywords()); System.out.println("SQLStateType : "+dbmd.getSQLStateType()); System.out.println("StringFunctions : "+dbmd.getStringFunctions()); System.out.println("SystemFunctions : "+dbmd.getSystemFunctions()); System.out.println("Schemas : "+dbmd.getSchemas()); System.out.println("TimeDateFunctions : "+dbmd.getTimeDateFunctions()); System.out.println("URL : "+dbmd.getURL()); System.out.println("UserName : "+dbmd.getUserName()); } }
実行結果は以下です。
CatalogSeparator : . CatalogTerm : CATALOG DatabaseProductName : HDB DatabaseProductVersion : 1.00.38.368649 DatabaseMajorVersion : 1 DatabaseMinorVersion : 0 DefaultTransactionIsolation : 2 DriverMajorVersion : 1 DriverMinorVersion : 0 DriverName : HDB DriverVersion : 1.0 ExtraNameCharacters : IdentifierQuoteString : " JDBCMajorVersion : 4 JDBCMinorVersion : 0 MaxBinaryLiteralLength : 0 MaxCatalogNameLength : 0 MaxCharLiteralLength : 0 MaxColumnNameLength : 127 MaxColumnsInGroupBy : 0 MaxColumnsInIndex : 0 MaxColumnsInOrderBy : 0 MaxColumnsInSelect : 0 MaxColumnsInTable : 0 MaxConnections : 0 MaxCursorNameLength : 0 MaxIndexLength : 0 MaxProcedureNameLength : 127 MaxRowSize : 0 MaxSchemaNameLength : 128 MaxStatementLength : 0 MaxStatements : 0 MaxTableNameLength : 127 MaxTablesInSelect : 0 MaxUserNameLength : 256 NumericFunctions : ABS,ACOS,ASIN,ATAN,ATAN2,CEILING,COS,EXP,FLOOR,LOG,LOG10,MOD,POWER,ROUND,SIGN,SIN,SQRT,TAN ProcedureTerm : PROCEDURE ResultSetHoldability : 1 RowIdLifetime : ROWID_UNSUPPORTED SchemaTerm : SCHEMA SearchStringEscape : \ SQLKeywords : SQLStateType : 2 StringFunctions : ASCII,CHAR,CONCAT,LENGTH,LTRIM,RTRIM,SUBSTRING SystemFunctions : IFNULL Schemas : com.sap.db.jdbc.ResultSetSapDBFinalize@bbe0f0a TimeDateFunctions : CURDATE,CURTIME,HOUR,MINUTE,MONTH,NOW,SECOND,WEEK,YEAR URL : jdbc:sap://XXX.XXX.XXX.XXX:30015 UserName : SATOSHI
まとめ
前回の事始め記事に続いて、今回のSAP HANA Oneをご紹介しました。AWS Marketplaceを使ってワンクリックでソフトウェア込みの夢のマシンを1時間単位で使えるという時代の変化について行けませんw。次回は脅威のパフォーマンスをどのように引き出すかいろいろ試したいと思います。
参考資料
Amazon EC2上でSAP HANAを使ったインメモリコンピューティング事始め